<html>
  <head>
    <meta content=
    "HTML Tidy for Cygwin (vers 1st February 2003), see www.w3.org"
    name="generator">
    <meta http-equiv="Content-Language" content="en-us">
    <meta name="generator" content="Microsoft FrontPage 5.0">
    <meta name="ProgId" content="FrontPage.Editor.Document">
    <meta name="generator" content="Microsoft FrontPage 5.0">
    <title>
      JRCS - A RCS Archive Parser in Java
    </title>
    <link rel="stylesheet" type="text/css" href="default.css">
  </head>
  <body>
    <!--#include file="../software/navbar.html" -->
    <!--#include file="../juanca/navbar.html" -->
    <hr>
    <h1>
      JRCS
    </h1>
    <h2>
      RCS/CVS Archive Manipulation and a Differencing Engine in Java
    </h2>
    <p>
      <a href="../jrcs/">JRCS</a> is a library for parsing and
      manipulation of RCS archive files like the ones produced by RCS
      (Revision Control System) and by CVS (Concurrent Versioning
      System).
    </p>
    <p>
      The home of JRCS is at <a href=
      "http://www.suigeneris.org/jrcs/">http://www.suigeneris.org/jrcs/</a>.
    </p>
    <h2>
      Copyright
    </h2>
    <p>
      On April 2002 I donated the JRCS library to the Apache Software
      Foundation under request of Jason van Zyl. JRCS will now be part
      of the <a href="http://jakarta.apache.org/commons">Commons</a>
      project at Jakarta/Apache.
    </p>
    <p>
      JRCS is distributed under the <a href=
      "http://www.apache.org/licenses/LICENSE">Apache Software License
      (ASL)</a>.
    </p>
    <h2>
      Diff in Java
    </h2>
    <p>
      The library includes a framework for pluggable differencing
      engines. Currently, two algorithms are implemented:
    </p>
    <ul>
      <li>
        A simple, fast, memory conscious, but suboptimal algorithm by
        me.
      </li>
      <li>
        The <a href=
        "http://www.cs.arizona.edu/people/gene/PAPERS/diff.ps">Eugene
        Myers</a> algorithm that produces optimal results.
      </li>
    </ul>
    <p>
      The diff engine can be used by itself to compare the contents of
      any two arrays, whatever the underlying type.
    </p>
    <h2>
      Download
    </h2>
    <p>
      The Jakarta project at Apache has not published JRCS yet, but you
      can get a copy of the new, improved version of JRCS from their
      CVS repository.
    </p>
    <p>
      You can also get copy of the Jakarta distribution of JRCS from
      here:
    </p>
    <ul>
      <li>
        The <a href="dist/jrcs-full-0.1.7.tar.gz">full</a> (~330K)
        distribution includes everything you need to use the library,
        including the third party libraries <a href=
        "http://jakarta.apache.org/oro/">ORO</a>, and <a href=
        "http://www.junit.org">JUnit</a>. Precompiled jar files are
        also included. <a href=
        "dist/jrcs-full-0.1.7.tar.gz">[download]</a>
      </li>
      <li>
        The <a href="dist/jrcs-0.1.7.tar.gz">compact</a> (~200K)
        distribution includes everything above except the third party
        libraries, which you can get from their home sites as explained
        below. <a href="dist/jrcs-0.1.7.tar.gz">[download]</a>
      </li>
    </ul>
    <h2>
      Installation
    </h2>
    <p>
      Uncompress the distribution file to the directory of your choice.
      The precompiled jars can be found under the ./lib directory.
    </p>
    <h2>
      Documentation
    </h2>
    <p>
      The JRCS documentation consists of the API documentation
      generated by JavaDoc. There's a <a href="doc/api/">local copy</a>
      of the documentation accessible from this site.
    </p>
    <p>
      In the lack of a user manual, I recommend you examine the test
      suite classes as found in the <code>./tests</code> directory in
      the distribution.
    </p>
    <h2>
      Third party stuff used/required by JRCS
    </h2>
    <h3>
      JUnit
    </h3>
    <p>
      The library tests are written for the JUnit Testing Framework.
      For distributions and documentation of JUnit see <a href=
      "http://www.junit.org/">http://www.junit.org/</a>.
    </p>
    <h3>
      ORO Regexp
    </h3>
    <p>
      The Jakarta ORO regexp library is used for RCS keyword
      management. You can get a copy of ORO from <a href=
      "http://jakarta.apache.org/oro/">http://jakarta.apache.org/oro/</a>.
      A copy of ORO regexp is included in the full distribution of this
      library.
    </p>
    <p>
      The <a href="http://jakarta.apache.org/oro">ORO</a> regexp
      package replaced GNU Regexp in the new version of JRCS.
    </p>
    <h3>
      Ant
    </h3>
    <p>
      Jakarta Ant is used for building the JRCS library. Ant is the
      Jakarta project's build tool. You can get a copy of Ant from
      <a href=
      "http://jakarta.apache.org/ant/">http://jakarta.apache.org/ant/</a>.
    </p>
    <p>
      You'll need to also download the optional Ant tasks if you'll be
      running JUnit or JavaCC (more info on JavaCC below).
    </p>
    <h3>
      JavaCC
    </h3>
    <p>
      The RCS parser is constructed using the <a href=
      "http://www.webgain.com/products/java_cc/">JavaCC</a> compiler
      compiler. You can get a copy of <a href=
      "http://www.webgain.com/products/java_cc/">JavaCC</a> from
      <a href=
      "http://www.webgain.com/products/java_cc/">http://www.webgain.com/products/java_cc/</a>.
    </p>
    <p>
      JavaCC is not distributable, so you must get a copy of it
      yourself if you intend to use it. Keep in mind that, as
      distributed, this library does <b>not</b> require JavaCC to be
      compiled because all the JavaCC generated .java files are already
      included.
    </p>
    <p>
      If you decide to use JavaCC, please adjust the "javacc.lib.dir"
      property in the <a href="ant_build.xml">build.xml</a> script as
      needed. You'll also need to download and install the set of
      optional tasks for Ant.
    </p>
    <h2>
      Change Log
    </h2>
    <table bordercolor="green" border="1" cellspacing="0"
           cellpadding="4" summary="change log">
      <tr valign="top">
        <td>
          2003.05.29
        </td>
        <td>
          v0.1.7
        </td>
        <td>
          &#160;
          <p>
            Brian McBride &lt;bwm at hplb dot hpl dot hp dot com&gt;
            added the Visitor pattern to Revisions and Deltas, and made
            differencing algorithms pluggable using the Algorithm
            pattern.
          </p>
          <p>
            Juanco implemented the Eugene Myers algorithm, and made it
            the default.
          </p>
        </td>
      </tr>
      <tr valign="top">
        <td>
          2002.10.09
        </td>
        <td>
          v0.1.6
        </td>
        <td>
          &#160;
          <p>
            Fixed node ordering in written archive files so it's
            compatible with the one done by CVS and RCS.
          </p>
          <p>
            Thanks to T. (Hari) Hariharan &lt;hari at peribin dot
            com&gt; for providing the feedback, bug reports, and fixes,
            that contributed to this very stable release.
          </p>
        </td>
      </tr>
      <tr valign="top">
        <td>
          2002.09.28
        </td>
        <td>
          v0.1.5
        </td>
        <td>
          &#160;
          <p>
            Fixed incompatibilities with RCS format in generated change
            deltas.
          </p>
          <p>
            Fixes so RCS files always have the correct line endings.
          </p>
          <p>
            Fixed non-operational Archive.save().
          </p>
        </td>
      </tr>
      <tr valign="top">
        <td>
          2002.09.23
        </td>
        <td>
          v0.1.4
        </td>
        <td>
          &#160;
          <p>
            Removed unicode features from parser because RCS files are
            plain ASCII.
          </p>
          <p>
            Fixed LA bug in parsing of version ranges.
          </p>
        </td>
      </tr>
      <tr valign="top">
        <td>
          2002.06.18
        </td>
        <td>
          v0.1.3
        </td>
        <td>
          &#160;
          <p>
            Published Jakarta JRCS project code with contributions and
            bug fixes by various developers.
          </p>
        </td>
      </tr>
      <tr valign="top">
        <td>
          2002.02.18
        </td>
        <td>
          v0.1.2
        </td>
        <td>
          &#160;
          <p>
            I donated the JRCS library to the Apache Software
            Foundation.
          </p>
        </td>
      </tr>
      <tr valign="top">
        <td>
          2002.01.08
        </td>
        <td>
          v0.1.2
        </td>
        <td>
          &#160;
          <p>
            Minor changes to distribution
          </p>
        </td>
      </tr>
      <tr valign="top">
        <td>
          2001.09.17
        </td>
        <td>
          v0.1.1
        </td>
        <td>
          &#160;
          <p>
            Added Archive.getReleaseVersion() methods to retreive tip
            version numbers without having to retreive the the
            release's text.
          </p>
          <p>
            Fixed BranchNode.nextInPathTo() so it went on till finding
            the tip revision when in soft mode.
          </p>
          <p>
            Refactored path getting code in Archive.getRelease() to
            make it common to Archive.getReleaseVersion()
          </p>
        </td>
      </tr>
      <tr valign="top">
        <td>
          2001.03.22
        </td>
        <td>
          v0.1.0
        </td>
        <td>
          &#160;
          <p>
            Fixed spelling and typing mistakes in the site/docs
          </p>
        </td>
      </tr>
    </table>
    <hr>
    <!--#include file="../software/navbar.html" -->
    <!--#include file="../juanca/navbar.html" -->
    <!-- \$Id$ -->
    <!--#include file="../copyright.html" -->
    </body>
</html>
